
package datos;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JTable;


/**
 * clase para administrar la conexion a base de datos
 *
 * @author desarrollo de software ITESI
 * @version SISTRA 1.0
 *
*/
public class BDAdmin {
    private Connection cnConexion;
    private ResultSet rsResultSet;
    private Statement stSentencia;
    private String driverName;
    private String url;
    private String dataBaseName;
    private String serverName;
    private int port;
    


    /**
     * En este metodo se inicializa el driverName y la url
     */
    public BDAdmin() {
            dataBaseName="bdamservice";
            serverName="localhost";
            port=Integer.valueOf(3306);
            driverName="com.mysql.jdbc.Driver";
            url="jdbc:mysql://" + serverName + ":"+port+"/" +dataBaseName;
    }

    /**
     * En este metodo se insertan datos en una BD a partir de una sentencia SQL
     *
     * @param   String sentenciaSQL,String usr, String pwd
     * @return  Regresara Exito! en caso de que la operacion sea realizada
     */
    public String insertar(String sentenciaSQL,String usr, String pwd){
        String res="";
        res=doLogin(usr,pwd);
        if(res.equals("Exito!")){
            try{
                stSentencia=cnConexion.createStatement();
                stSentencia.executeUpdate(sentenciaSQL);
                res="Exito!";
            }catch(SQLException e){
                res=e.getMessage();
                
            }//fin del catch
            cerrarConexion();
        }//fin del if
        return(res);
    }//fin de insertar

    /**
     * En este metodo se modifican datos en una BD a partir de una sentencia SQL
     *
     * @param   String sentenciaSQL,String usr, String pwd
     * @return  Regresara Exito! en caso de que la operacion sea realizada
     */
    public String modificar(String sentenciaSQL,String usr, String pwd){
        String res="";
        res=doLogin(usr,pwd);
        if(res.equals("Exito!")){
            try{
                stSentencia=cnConexion.createStatement();
                stSentencia.executeUpdate(sentenciaSQL);
                res="Exito!";
            }catch(SQLException e){
                res=e.getMessage();

            }//fin del catch
            cerrarConexion();
        }//fin del if
        return(res);
    }//fin de modificar

     /**
     * En este metodo se eliminan datos en una BD a partir de una sentencia SQL
     *
     * @param   String sentenciaSQL,String usr, String pwd
     * @return  Regresara Exito! en caso de que la operacion sea realizada
     */
    public String eliminar(String sentenciaSQL,String usr, String pwd){
        String res="";
        int numCambios=0;
        res=doLogin(usr,pwd);
        if(res.equals("Exito!")){
            try{
                stSentencia=cnConexion.createStatement();
                numCambios=stSentencia.executeUpdate(sentenciaSQL);
                res="Exito!";
            }catch(SQLException e){
                res=e.getMessage();
                
            }//fin del catch
            cerrarConexion();
        }//fin del if
        return res;
    }//fin de eliminar

     /**
     * En este metodo se consultan datos en una BD a partir de una sentencia SQL
     *
     * @param   String sentenciaSQL,String usr, String pwd
     * @return  Regresara Exito! en caso de que la operacion sea realizada
     */
    public String consultar(String sentenciaSQL,String usr, String pwd){
        String res="";
        res=doLogin(usr,pwd);
        if(res.equals("Exito!")){
            try{
                stSentencia=cnConexion.createStatement();
                rsResultSet=stSentencia.executeQuery(sentenciaSQL);
                //sacamos el String de acuerdo a la consulta
                res="";

                //obtenemos el numero de columnas en el resultset
                int n=rsResultSet.getMetaData().getColumnCount();

                while(rsResultSet.next()){
                    for(int i=1; i<=n; i++)
                        res+=rsResultSet.getString(i) + ",";
                }//fin del while
            }catch(SQLException e){
                
            }//fin del catch
            cerrarConexion();
        }//fin del if
        return(res);
    }//fin de consultar
    
    
    
    public String consultarB(String sentenciaSQL,String usr, String pwd){
        String res="";
        res=doLogin(usr,pwd);
        if(res.equals("Exito!")){
            try{
                stSentencia=cnConexion.createStatement();
                rsResultSet=stSentencia.executeQuery(sentenciaSQL);
                //sacamos el String de acuerdo a la consulta
                res="";

                //obtenemos el numero de columnas en el resultset
                int n=rsResultSet.getMetaData().getColumnCount();

                while(rsResultSet.next()){
                    for(int i=1; i<=n; i++)
                        res+=rsResultSet.getString(i) + "¬";
                }//fin del while
            }catch(SQLException e){
                
            }//fin del catch
            cerrarConexion();
        }//fin del if
        return(res);
    }
    
    public String consultarA(String sentenciaSQL,String usr, String pwd){
        String res="";
        res=doLogin(usr,pwd);
        if(res.equals("Exito!")){
            try{
                stSentencia=cnConexion.createStatement();
                rsResultSet=stSentencia.executeQuery(sentenciaSQL);
                //sacamos el String de acuerdo a la consulta
                res="";

                //obtenemos el numero de columnas en el resultset
                int n=rsResultSet.getMetaData().getColumnCount();

                while(rsResultSet.next()){
                    for(int i=1; i<=n; i++)
                        res+=rsResultSet.getString(i) + "@";
                }//fin del while
            }catch(SQLException e){
                
            }//fin del catch
            cerrarConexion();
        }//fin del if
        return(res);
    }
   
    public String doLogin(String usr, String pwd){
        String res="";
        try{
            Class.forName(driverName);
            cnConexion=DriverManager.getConnection(url,usr,pwd);
            res="Exito!";
        }catch(ClassNotFoundException e){
            
        }catch(SQLException e){
            
        }//fin del catch
        return(res);
    }//fin de doLogin


     /**
     * Este metodo se encarga de regresar una conexion de tipo Connection
     *
     * @param   String usr, String pwd
     * @return  Regresara una Connection
     */
    public Connection conexion(String usr,String pwd){
        Connection res=null;
        try{
            Class.forName(driverName);
            cnConexion=DriverManager.getConnection(url,usr,pwd);
            res=cnConexion;
        }catch(ClassNotFoundException e){
            
        }catch(SQLException e){
            
        }//fin del catch
        return(res);
    }//fin de doLogin


     /**
     * Este metod sirve para cerrar la conexion con la bd
     *
     */
    public void cerrarConexion(){
        try{
            cnConexion.close();
        }catch(SQLException e){
           
        }//fin del catch
    }//fin de cerrarConexion

}